Named Queries হলো পূর্বনির্ধারিত (predefined) SQL বা JPQL (Java Persistence Query Language) স্টেটমেন্ট যা JPA বা Hibernate-এর মাধ্যমে ব্যবহৃত হয়। এগুলো সাধারণত Entity Class-এ সংজ্ঞায়িত থাকে এবং পুনরাবৃত্তিক কোড এড়াতে সাহায্য করে।
Named Queries ব্যবহার করলে অ্যাপ্লিকেশন কোড থেকে কোয়ারি আলাদা থাকে, যা কোডের রিডেবিলিটি এবং রিইউজেবিলিটি বৃদ্ধি করে।
Named Queries সাধারণত @NamedQuery অথবা @NamedQueries এনোটেশন ব্যবহার করে সংজ্ঞায়িত করা হয় এবং এটি Entity ক্লাসের উপর নির্দিষ্ট থাকে।
@Entity
@NamedQuery(
name = "User.findByUsername",
query = "SELECT u FROM User u WHERE u.username = :username"
)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String email;
// Getters and Setters
}
@Entity
@NamedQueries({
@NamedQuery(
name = "User.findAll",
query = "SELECT u FROM User u"
),
@NamedQuery(
name = "User.findByEmail",
query = "SELECT u FROM User u WHERE u.email = :email"
)
})
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String email;
// Getters and Setters
}
Entity ক্লাসে Named Query সংজ্ঞায়িত করতে হবে (উপরের উদাহরণ অনুসরণ করে)।
EntityManager বা Spring Data JPA ব্যবহার করে Named Query কল করা যায়।
@Service
public class UserService {
@Autowired
private EntityManager entityManager;
public User findByUsername(String username) {
return entityManager.createNamedQuery("User.findByUsername", User.class)
.setParameter("username", username)
.getSingleResult();
}
}
Spring Data JPA স্বয়ংক্রিয়ভাবে Named Query সনাক্ত করতে পারে যদি রেপোজিটরি মেথডের নাম Named Query এর নামের সঙ্গে মিলে যায়।
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
স্প্রিং ORM Named Queries সহজভাবে ব্যবহার করার জন্য প্রয়োজনীয় EntityManager এবং Spring Data JPA ইন্টিগ্রেশন প্রদান করে। এটি ডেভেলপারদের জন্য কোড পরিষ্কার এবং রিইউজেবল রাখতে সহায়তা করে।